package com.lbt.javaSE.meituan;

import java.util.Scanner;
import java.util.jar.JarOutputStream;

public class Test3Tianshu {
    public static void main(String[] args) {
        int n,m;
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        m=sc.nextInt();
        int[][] array=new int[n][m];
        //初始化
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                array[i][j]=sc.nextInt();
            }
        }
        //可以先判断出这个数组 最小是多少看是否重复
        int n1=n;
        int min=n/2;
        while (true){
            if(min*2!=n1) {
                break;
            }
            n1=min;
            min=n1/2;
        }
        min=min+2;  //函数最小的重复矩阵
//        System.out.println("min--------------"+min);
        chonhfu(array,min,n,m);

    }
    public static void chonhfu(int [][] array,int min,int n,int m){
        int a1=0;
        int a2=min; //用于判断最小重复  min  最小重复单元
        int ai=min; //循环时使用这个小标
        boolean p=true;
        while (p){  //最大镜子单元
            for(int i=0;i<a2;i++){
                for(int j=0;j<m;j++){
                    if(array[i][j]!=array[ai][j]){
                        ai=ai*2;
                        a2=ai;
                        break;
                    }
                    if(i==(min-1)){
                        p=false;
                    }
                }
                ai++;
            }
        }
        int min2=a2/2;      //判断镜子  单元
        for(int i=0;i<=min2;i++) {
            for (int j = 0; j < m; j++) {
                if(array[i][j]!=array[a2-1][j]){
                    min2=min2*2;
                }
            }
            a2--;
        }
        for(int i=0;i<min2;i++){
            System.out.println();
            for(int j=0;j<m;j++){
                System.out.print(array[i][j]);
            }
        }

    }
}
